package rule

import (
	"github.com/dlclark/regexp2"
	"github.com/go-playground/validator/v10"
	"go.uber.org/zap"
	"xincan.com.cn/tarot-go-framework/global"
)

// PasswordValidator
// Title    		PasswordValidator
// Description   	"密码验证器"
// Param			field 	validator.FieldLevel	"验证字段"
// Auth      		alittlexincan@163.com         	"时间（2024/07/22 11:36）"
// Return    		error							"错误信息"
func PasswordValidator(field validator.FieldLevel) bool {
	// 正则表达式解释：
	// ^(?=.*[0-9]) 前瞻断言，确保至少有一个数字
	// (?=.*[a-z]) 前瞻断言，确保至少有一个小写字母
	// (?=.*[A-Z]) 前瞻断言，确保至少有一个大写字母
	// .{8,20}$ 确保长度为8到20个任意字符
	passwordRegex := "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).{8,20}$"
	reg, _ := regexp2.Compile(passwordRegex, 0)
	matched, err := reg.FindStringMatch(field.Field().String())
	if err != nil {
		global.Logger.Error("PasswordValidator", zap.Any("err", err))
		return false
	}
	return matched != nil
}

// RequiredCurrentNullWithout
// Title    		RequiredCurrentNullWithout
// Description   	"密码验证器"
// Param			field 	validator.FieldLevel	"验证字段"
// Auth      		alittlexincan@163.com         	"时间（2024/07/22 11:36）"
// Return    		error							"错误信息"
//func RequiredCurrentNullWithout(field validator.FieldLevel) bool {
//	var ms map[string]interface{}
//	if err := mapstructure.Decode(field.Top().Interface(), &ms); err != nil {
//		global.Logger.Error("RequiredCurrentNullWithout", zap.Any("err", err))
//	}
//	targetKey := field.Param()
//	targetValue := ms[targetKey]
//	currentValue := field.Field().String()
//	if currentValue != "" || targetValue != "" {
//		return true
//	}
//	return false
//}
